package cc.lucien.servlet;


import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;

@WebServlet("/upload")
//启动文件上传
@MultipartConfig(location = "F:\\tmp\\upload\\temp")
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Part part = req.getPart("img");

        /**
         *  上传文件
         *   文件类型处理：
         *          我们有可能要限制文件的类型，比如我们上传图片，那么就只能上传图片
         *  文件名处理：
         *       因为我们应对的是对客户端（很多用户）,有可能出现不同文件但是文件名相同的情况
         *       使用自定义的命名方式,注意有必要的话要在数据库将原文件名做保存
         *   文件的保存：
         *     1. 存储文件的方式：
         *     	    保存到web项目中, 一般通过 request.getServletContext().getRealPath("/")
         *          但是不建议这样做，后期维护或更新项目时比较麻烦
         *     2. 保存到数据库中
         *                 在以前我们是将文件保存到数据库中，比如: Mysql、Oracle.使用 blob/clob
         *                 但是也不建议这样做，因为关系型数据库存储文件的话会造成数据库臃肿，影响数据库效率
         *                 但是现在有非关系型数据库可以存储文件，并且效果较好。如： MongoDB
         *     3. 存储到服务器指定文件夹或者存储到文件服务器
         *   一般推荐使用 MongoDB 或者 文件服务器存储，然后将文件存储的信息保存到数据库中，便于使用和维护。
         *  文件分类：
         *           随着系统运行时间的推移，文件会越来越多。
         *           这时找文件会比较麻烦，一般会将文件分类再根据上传的时间或者功能模块
         *
         */
        if (part != null) {
            String fileName = part.getSubmittedFileName();
            String type = part.getContentType();
            long size = part.getSize();
            //写文件
            part.write("F:\\tmp\\upload\\" + fileName);
        }
    }
}
